@mediadatafusion/pi-workflow-suite 0.0.5 → 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/README.md +17 -28
- package/VERSION +1 -1
- package/docs/assets/pi-workflow-suite-demo.gif +0 -0
- package/package.json +1 -1
- package/scripts/build-package-export.mjs +109 -0
- package/scripts/check-clean-release-tree.sh +45 -0
package/CHANGELOG.md
CHANGED
package/README.md
CHANGED
|
@@ -1,17 +1,10 @@
|
|
|
1
1
|
# Pi Workflow Suite
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
<img src="https://cdn.jsdelivr.net/npm/@mediadatafusion/pi-workflow-suite@0.0.3/docs/assets/pi-workflow-suite-header.png" alt="Pi Workflow Suite — structured workflow orchestration for Pi" />
|
|
5
|
-
</p>
|
|
3
|
+

|
|
6
4
|
|
|
7
|
-
|
|
8
|
-
<a href="#installation"><img src="https://cdn.jsdelivr.net/npm/@mediadatafusion/pi-workflow-suite@0.0.3/docs/assets/readme-link-install.svg" alt="Install" /></a>
|
|
9
|
-
<a href="#quick-start"><img src="https://cdn.jsdelivr.net/npm/@mediadatafusion/pi-workflow-suite@0.0.3/docs/assets/readme-link-quick-start.svg" alt="Quick Start" /></a>
|
|
10
|
-
<a href="#core-commands"><img src="https://cdn.jsdelivr.net/npm/@mediadatafusion/pi-workflow-suite@0.0.3/docs/assets/readme-link-commands.svg" alt="Commands" /></a>
|
|
11
|
-
<a href="#settings-reference"><img src="https://cdn.jsdelivr.net/npm/@mediadatafusion/pi-workflow-suite@0.0.3/docs/assets/readme-link-settings.svg" alt="Settings" /></a>
|
|
12
|
-
</p>
|
|
5
|
+
[](#installation) [](#quick-start) [](#core-commands) [](#settings-reference)
|
|
13
6
|
|
|
14
|
-
**Workflow Suite Version:** `v0.0.
|
|
7
|
+
**Workflow Suite Version:** `v0.0.6`
|
|
15
8
|
|
|
16
9
|
## Overview
|
|
17
10
|
|
|
@@ -23,27 +16,23 @@ Pi itself is intentionally minimal and extensible. Pi Workflow Suite layers an o
|
|
|
23
16
|
|
|
24
17
|
See Pi Workflow Suite in action: structured workflow modes, settings, runtime status, and guided execution inside Pi.
|
|
25
18
|
|
|
26
|
-
https://
|
|
19
|
+
[](https://cdn.jsdelivr.net/npm/@mediadatafusion/pi-workflow-suite@0.0.6/docs/assets/pi-workflow-suite-demo.mp4)
|
|
27
20
|
|
|
28
21
|
## Screenshots
|
|
29
22
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
<td><img src="docs/assets/screenshots/05-mission-mode.png" alt="Mission Mode milestone progress" /></td>
|
|
44
|
-
<td><img src="docs/assets/screenshots/06-diagram-mermaid.png" alt="Workflow Suite Mermaid diagram output" /></td>
|
|
45
|
-
</tr>
|
|
46
|
-
</table>
|
|
23
|
+

|
|
24
|
+
|
|
25
|
+

|
|
26
|
+
|
|
27
|
+

|
|
28
|
+
|
|
29
|
+

|
|
30
|
+
|
|
31
|
+

|
|
32
|
+
|
|
33
|
+

|
|
34
|
+
|
|
35
|
+

|
|
47
36
|
|
|
48
37
|
## Contents
|
|
49
38
|
|
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
v0.0.
|
|
1
|
+
v0.0.6
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"@mediadatafusion/pi-workflow-suite","version":"0.0.
|
|
1
|
+
{"name":"@mediadatafusion/pi-workflow-suite","version":"0.0.6","description":"Structured workflow orchestration suite for Pi with Standard, Plan, Mission, compaction, diagrams, web access, repo lock, and safety gates.","license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/MediaDataFusion/pi-workflow-suite.git"},"homepage":"https://github.com/MediaDataFusion/pi-workflow-suite#readme","bugs":{"url":"https://github.com/MediaDataFusion/pi-workflow-suite/issues"},"keywords":["pi-package","pi-extension","pi-skill","pi-theme","pi-prompt","pi","pi-coding-agent","workflow","workflows","workflow-suite","workflow-orchestration","agent-workflow","plan-mode","mission-mode","standard-mode","subagents","skills","prompts","extensions","themes"],"type":"module","files":["extensions/","skills/","agents/","config/","docs/assets/","themes/","scripts/install-to-live.sh","scripts/verify-live.sh","scripts/audit-live.sh","scripts/quarantine-live-junk.sh","scripts/backup-live.sh","scripts/audit-settings.sh","scripts/bootstrap-project.sh","scripts/check-clean-release-tree.sh","scripts/build-package-export.mjs","README.md","LICENSE.md","NOTICE","TRADEMARKS.md","CHANGELOG.md","SECURITY.md","SUPPORT.md","CONTRIBUTING.md","VERSION","package-lock.json"],"pi":{"extensions":["./extensions/workflow-modes.ts","./extensions/subagent/index.ts"],"skills":["./skills"],"prompts":["./config/prompts"],"themes":["./themes"],"image":"https://cdn.jsdelivr.net/npm/@mediadatafusion/pi-workflow-suite@0.0.6/docs/assets/pi-workflow-suite-header.png","video":"https://cdn.jsdelivr.net/npm/@mediadatafusion/pi-workflow-suite@0.0.6/docs/assets/pi-workflow-suite-demo.mp4"},"peerDependencies":{"@earendil-works/pi-agent-core":"*","@earendil-works/pi-ai":"*","@earendil-works/pi-coding-agent":"*","@earendil-works/pi-tui":"*","typebox":"*"},"dependencies":{"@mermaid-js/mermaid-cli":"^11.14.0","beautiful-mermaid":"^1.1.3","sharp":"^0.34.5"},"private":false,"devDependencies":{"@earendil-works/pi-agent-core":"^0.74.0","@earendil-works/pi-ai":"^0.74.0","@earendil-works/pi-coding-agent":"^0.74.0","@earendil-works/pi-tui":"^0.74.0","@types/node":"^25.6.2","typebox":"^1.1.38","typescript":"^6.0.3"},"scripts":{"check:ts":"tsc --noEmit --noCheck","typecheck":"tsc --noEmit","validate":"npm run check:ts && ./scripts/check-clean-release-tree.sh && git diff --check"}}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { mkdtempSync, rmSync } from 'node:fs';
|
|
3
|
+
import { copyFile, mkdir, readFile, rename, writeFile } from 'node:fs/promises';
|
|
4
|
+
import { tmpdir } from 'node:os';
|
|
5
|
+
import { dirname, join, resolve } from 'node:path';
|
|
6
|
+
import { fileURLToPath } from 'node:url';
|
|
7
|
+
import { spawnSync } from 'node:child_process';
|
|
8
|
+
|
|
9
|
+
const scriptDir = dirname(fileURLToPath(import.meta.url));
|
|
10
|
+
const repoRoot = resolve(scriptDir, '..');
|
|
11
|
+
|
|
12
|
+
function run(command, args, options = {}) {
|
|
13
|
+
const result = spawnSync(command, args, {
|
|
14
|
+
cwd: options.cwd ?? repoRoot,
|
|
15
|
+
encoding: 'utf8',
|
|
16
|
+
stdio: options.stdio ?? ['ignore', 'pipe', 'inherit'],
|
|
17
|
+
});
|
|
18
|
+
if (result.status !== 0) {
|
|
19
|
+
throw new Error(`${command} ${args.join(' ')} failed with exit code ${result.status}`);
|
|
20
|
+
}
|
|
21
|
+
return result.stdout ?? '';
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function parseArgs(argv) {
|
|
25
|
+
const args = { out: undefined, keepPack: false };
|
|
26
|
+
for (let index = 0; index < argv.length; index += 1) {
|
|
27
|
+
const arg = argv[index];
|
|
28
|
+
if (arg === '--out') {
|
|
29
|
+
args.out = resolve(argv[index + 1] ?? '');
|
|
30
|
+
index += 1;
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
if (arg === '--keep-pack') {
|
|
34
|
+
args.keepPack = true;
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
throw new Error(`Unknown argument: ${arg}`);
|
|
38
|
+
}
|
|
39
|
+
return args;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function cdn(version, assetPath) {
|
|
43
|
+
return `https://cdn.jsdelivr.net/npm/@mediadatafusion/pi-workflow-suite@${version}/${assetPath}`;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
function buildPackageReadme(sourceReadme, version) {
|
|
47
|
+
const headerBlock = `# Pi Workflow Suite\n\n${
|
|
48
|
+
`})`
|
|
49
|
+
}\n\n${[
|
|
50
|
+
`[})](#installation)`,
|
|
51
|
+
`[})](#quick-start)`,
|
|
52
|
+
`[})](#core-commands)`,
|
|
53
|
+
`[})](#settings-reference)`,
|
|
54
|
+
].join(' ')}\n\n**Workflow Suite Version:** `;
|
|
55
|
+
|
|
56
|
+
let readme = sourceReadme.replace(
|
|
57
|
+
/^# Pi Workflow Suite\n\n<p align="center">[\s\S]*?\*\*Workflow Suite Version:\*\* /,
|
|
58
|
+
headerBlock,
|
|
59
|
+
);
|
|
60
|
+
|
|
61
|
+
const packageMediaBlock = `## Quick Demo\n\nSee Pi Workflow Suite in action: structured workflow modes, settings, runtime status, and guided execution inside Pi.\n\n[})](${cdn(version, 'docs/assets/pi-workflow-suite-demo.mp4')})\n\n## Screenshots\n\n${[
|
|
62
|
+
['Pi Workflow Suite Mission Home with workflow graphs', 'docs/assets/screenshots/00-mission-home.png'],
|
|
63
|
+
['Pi Workflow Suite startup logo', 'docs/assets/screenshots/01-startup-Logo.png'],
|
|
64
|
+
['Workflow Suite theme settings', 'docs/assets/screenshots/02-theme-settings.png'],
|
|
65
|
+
['Workflow Suite global safety settings', 'docs/assets/screenshots/03-GlobalSafetySettings.png'],
|
|
66
|
+
['Workflow Suite shared sub-agent settings', 'docs/assets/screenshots/04-SharedSubAgentsSettings.png'],
|
|
67
|
+
['Mission Mode milestone progress', 'docs/assets/screenshots/05-mission-mode.png'],
|
|
68
|
+
['Workflow Suite Mermaid diagram output', 'docs/assets/screenshots/06-diagram-mermaid.png'],
|
|
69
|
+
].map(([alt, path]) => `})`).join('\n\n')}\n\n`;
|
|
70
|
+
|
|
71
|
+
readme = readme.replace(/## Quick Demo[\s\S]*?## Contents\n/, `${packageMediaBlock}## Contents\n`);
|
|
72
|
+
return readme;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
async function main() {
|
|
76
|
+
const args = parseArgs(process.argv.slice(2));
|
|
77
|
+
const workDir = mkdtempSync(join(tmpdir(), 'pi-workflow-suite-export-'));
|
|
78
|
+
const packDir = join(workDir, 'pack');
|
|
79
|
+
await mkdir(packDir, { recursive: true });
|
|
80
|
+
|
|
81
|
+
const packOutput = run('npm', ['pack', '--pack-destination', packDir]);
|
|
82
|
+
const tarballName = packOutput.trim().split('\n').filter(Boolean).at(-1);
|
|
83
|
+
if (!tarballName) {
|
|
84
|
+
throw new Error('npm pack did not report a tarball name');
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
run('tar', ['-xzf', join(packDir, tarballName), '-C', workDir]);
|
|
88
|
+
const extractedDir = join(workDir, 'package');
|
|
89
|
+
const packageJson = JSON.parse(await readFile(join(extractedDir, 'package.json'), 'utf8'));
|
|
90
|
+
const sourceReadme = await readFile(join(repoRoot, 'README.md'), 'utf8');
|
|
91
|
+
await writeFile(join(extractedDir, 'README.md'), buildPackageReadme(sourceReadme, packageJson.version));
|
|
92
|
+
|
|
93
|
+
const outputDir = args.out ?? join(workDir, 'export');
|
|
94
|
+
rmSync(outputDir, { recursive: true, force: true });
|
|
95
|
+
await mkdir(dirname(outputDir), { recursive: true });
|
|
96
|
+
await rename(extractedDir, outputDir);
|
|
97
|
+
|
|
98
|
+
if (args.keepPack) {
|
|
99
|
+
await mkdir(join(outputDir, '.pack-source'), { recursive: true });
|
|
100
|
+
await copyFile(join(packDir, tarballName), join(outputDir, '.pack-source', tarballName));
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
console.log(outputDir);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
main().catch((error) => {
|
|
107
|
+
console.error(error instanceof Error ? error.message : String(error));
|
|
108
|
+
process.exit(1);
|
|
109
|
+
});
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
5
|
+
cd "$ROOT"
|
|
6
|
+
|
|
7
|
+
fail=0
|
|
8
|
+
report() {
|
|
9
|
+
printf 'ERROR: %s\n' "$1" >&2
|
|
10
|
+
fail=1
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
if [[ -e AGENTS.md && -n "$(git ls-files AGENTS.md)" ]]; then report 'AGENTS.md must not be present on clean release main'; fi
|
|
14
|
+
if [[ -e .github && -n "$(git ls-files .github)" ]]; then report '.github/ must not be tracked on clean release main'; fi
|
|
15
|
+
if [[ -e .factory && -n "$(git ls-files .factory)" ]]; then report '.factory/ must not be tracked on clean release main'; fi
|
|
16
|
+
if [[ -e .kilo && -n "$(git ls-files .kilo)" ]]; then report '.kilo/ must not be tracked on clean release main'; fi
|
|
17
|
+
if [[ -e .cursor && -n "$(git ls-files .cursor)" ]]; then report '.cursor/ must not be tracked on clean release main'; fi
|
|
18
|
+
|
|
19
|
+
while IFS= read -r path; do
|
|
20
|
+
case "$path" in
|
|
21
|
+
agents/*|config/*|extensions/*|skills/*|docs/assets/*|themes/*|scripts/install-to-live.sh|scripts/verify-live.sh|scripts/audit-live.sh|scripts/quarantine-live-junk.sh|scripts/backup-live.sh|scripts/audit-settings.sh|scripts/bootstrap-project.sh|scripts/check-clean-release-tree.sh|scripts/build-package-export.mjs|README.md|CHANGELOG.md|CONTRIBUTING.md|LICENSE.md|NOTICE|SECURITY.md|SUPPORT.md|TRADEMARKS.md|VERSION|package.json|package-lock.json|tsconfig.json|.gitignore)
|
|
22
|
+
;;
|
|
23
|
+
docs/*)
|
|
24
|
+
report "non-asset docs file is not allowed: $path"
|
|
25
|
+
;;
|
|
26
|
+
scripts/test-*|scripts/sync-from-live.sh)
|
|
27
|
+
report "internal script is not allowed: $path"
|
|
28
|
+
;;
|
|
29
|
+
.github/*|AGENTS.md|.factory/*|.kilo/*|.cursor/*)
|
|
30
|
+
report "internal path is not allowed: $path"
|
|
31
|
+
;;
|
|
32
|
+
*auth.json|*settings.json|*workflow-settings.json|*active.json|workflows/*|*sessions/*|*missions/*|*plans/*|*logs/*|*.env|*.env.*|*.DS_Store)
|
|
33
|
+
report "runtime/private path is not allowed: $path"
|
|
34
|
+
;;
|
|
35
|
+
*)
|
|
36
|
+
report "path is outside clean release allowlist: $path"
|
|
37
|
+
;;
|
|
38
|
+
esac
|
|
39
|
+
done < <(git ls-files | sort)
|
|
40
|
+
|
|
41
|
+
if [[ "$fail" -ne 0 ]]; then
|
|
42
|
+
exit 1
|
|
43
|
+
fi
|
|
44
|
+
|
|
45
|
+
printf 'OK: clean release tree allowlist passed\n'
|